package cn.tuning.dao;

import cn.tuning.entity.OrderInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author lixiaolong
 * @date 2021-08-04 22:22
 * @description: 订单持久层
 */
public interface OrderDao {


    /**
     * 通过骑手邮箱骑手的全部订单
     * @param riderId 骑手邮箱
     * @return
     */
    List<OrderInfo> listOrdersByRiderId(String riderId);

    /**
     * 通过订单id得到订单
     * @param orderId 订单id
     * @return
     */
    OrderInfo getOrderByOrderId(String orderId);

    /**
     * 通过骑手邮箱和订单状态获取骑手全部订单
     * @param riderId 骑手邮箱
     * @param orderStatus 订单状态
     * @return
     */
    List<OrderInfo> listOrdersByRiderIdAndOrderStatus(@Param("riderId") String riderId,
                                                      @Param("orderStatus") int orderStatus);


    /**
     * 通过顾客邮箱获取顾客全部的订单
     * @param customerId 顾客邮箱
     * @return
     */
    List<OrderInfo> listOrdersByCustomerId(String customerId);

    /**
     * 通过顾客邮箱和订单状态获取对应全部的订单
     * @param customerId 顾客邮箱
     * @param orderStatus 订单状态
     * @return
     */
    List<OrderInfo> listOrdersByCustomerIdAndOrderStatus(@Param("customerId") String customerId,
                                                         @Param("orderStatus") int orderStatus);

    /**
     * 通过订单状态获取对应全部的订单
     * @param orderStatus 订单状态
     * @return
     */
    List<OrderInfo> listOrdersByOrderStatus(int orderStatus);



    /**
     * 插入一条订单信息
     * @param orderInfo
     */
    void insertOrder(OrderInfo orderInfo);

    /**
     * 骑手接单更新订单
     * @param riderId 骑手id(骑手邮箱)riderId
     * @param orderStatus 订单状态
     * @param receivedTime 接单时间
     * @param id 订单id
     */
    void updateOrderOfByIdReceive( @Param("riderId") String riderId,
                                   @Param("orderStatus") int orderStatus,
                                   @Param("receivedTime") Date receivedTime,
                                   @Param("id") String id);

    /**
     * 骑手完成订单时更新订单
     * @param id 订单id
     * @param orderStatus 订单状态
     * @param finishTime 完成时间
     */
    void updateOrderByIdOfFinish(@Param("id") String id,
                                 @Param("orderStatus") int orderStatus,
                                 @Param("finishTime") Date finishTime);



}
